# 数据并不总是以训练机器学习算法所需的最终处理形式出现。我们使用变换对数据进行一些操作，使其适合训练。
# 所有 TorchVision 数据集都有两个参数 - 用于修改特征的 transform 和用于修改标签的 target_transform - 它们接受包含变换逻辑的可调用对象。
# torchvision.transforms 模块提供了几个常用的开箱即用变换。
# FashionMNIST 特征采用 PIL 图像格式，标签为整数。
# 对于训练，我们需要将特征转换为归一化张量，将标签转换为独热编码张量。
# 为了进行这些转换，我们使用 ToTensor 和 Lambda

import torch
from torchvision import datasets, transforms
from torchvision.transforms import ToTensor, Lambda

ds = datasets.FashionMNIST(
    root="data",
    train=True,
    download=True,
    transform=ToTensor(),
    target_transform=Lambda(lambda y: torch.zeros(10, dtype=torch.float).scatter_(0, torch.tensor(y), value=1))
)
print(ds)

target_transform = Lambda(lambda y: torch.zeros(
    10, dtype=torch.float).scatter_(dim=0, index=torch.tensor(y), value=1))








